home *** CD-ROM | disk | FTP | other *** search
- /*-------------------------------------------------------------------
-
- AOCE Post Office Protocol (POP) / Simple Mail Transfer Protocol (SMTP)
- Mail Service Access Module
-
- written by Steve Falkenburg-- MacDTS
- ©1991-1993 Apple Computer, Inc.
-
- --------------
- change history
- --------------
-
- SJF 02/19/93 update for beta build b1
- SJF 10/29/92 update to a11 a11
- SJF 06/08/92 update to a8 a8
- SJF 02/15/92 first working version a4.5
- SJF 10/16/91 initial coding a3
-
- ---------------------------------------------------------------------*/
-
- #ifndef __TYPES__
- #include <Types.h>
- #endif
-
- #ifndef __OCE__
- #include <OCE.h>
- #endif
-
- #ifndef __OCEMAIL__
- #include <OCEMail.h>
- #endif
-
- #include "const.h"
- #include "gwerrors.h"
- #include "mytypes.h"
- #include "globals.h"
- #include "utils.h"
- #include "spoolsystem.h"
- #include "gatewaystuff.h"
-
- #include "reports.h"
-
- OSErr GenerateDeliveryReport(Boolean wasDelivered,FSSpec *spoolSpec)
- {
- #pragma unused (wasDelivered)
- OSErr err;
- unsigned long bufferLen;
- short recipientIndex,spoolIndex;
- MailIndications indications;
- MailLetterID letterID;
- OCEPackedRecipient packedSender;
- OCERecipient sender;
- RecordID entitySpecifier;
- MSAMParam gwp;
- MailMsgRef reportRef;
-
- TraceExecution("\pGenerateDeliveryReport");
-
- // get required information from spool to generate reports
-
- bufferLen = sizeof(MailIndications);
- err = GetFromSpool(spoolSpec,kIndicationsType,kAttribCreator,0,(Ptr)&indications,&bufferLen,0);
- if (err!=noErr) {
- return err;
- }
-
- bufferLen = sizeof(MailLetterID);
- err = GetFromSpool(spoolSpec,kLetterIDType,kAttribCreator,0,(Ptr)&letterID,&bufferLen,0);
- if (err!=noErr) {
- return err;
- }
-
- bufferLen = sizeof(OCEPackedRecipient);
- err = GetFromSpool(spoolSpec,kFromType,kAddrCreator,0,(Ptr)&packedSender,&bufferLen,0);
- if (err!=noErr) {
- return err;
- }
- OCEUnpackDSSpec((PackedDSSpec*)&packedSender,&sender,&entitySpecifier);
-
- if ((indications.receiptReports) || (indications.nonReceiptReports)) {
-
- // make the report
-
- gwp.header.ioCompletion = (ProcPtr)MSAMCompletion;
- gwp.msamCreateReport.msgID = letterID;
- gwp.msamCreateReport.sender = &sender;
- MSAMCreateReport(&gwp,true);
- err = WaitPBDone(&gwp);
- if (err!=noErr)
- return err;
- reportRef = gwp.msamCreateReport.mailMsgRef;
-
- // add the recipients to the report
-
- for (spoolIndex=0,err=noErr; err==noErr; spoolIndex++) {
- bufferLen = sizeof(short);
- err = GetFromSpool(spoolSpec,kRecipientType,kReportCreator,spoolIndex,(Ptr)&recipientIndex,&bufferLen,0);
- if (err==noErr) {
- gwp.msamPutRecipientReport.mailMsgRef = reportRef;
- gwp.msamPutRecipientReport.recipientIndex = recipientIndex;
- gwp.msamPutRecipientReport.result = noErr; // we're just always saying the message was sent just fine
- MSAMPutRecipientReport(&gwp,true);
- WaitPBDone(&gwp);
- }
- }
-
- // submit the report
-
- gwp.msamSubmit.mailMsgRef = reportRef;
- gwp.msamSubmit.submitFlag = true; // submit report
- err = MSAMSubmit(&gwp);
-
- }
-
- return err;
- }
-
-
-
-